/**
 * 管理员API
 */
import axios from 'axios';

const instance = axios.create({
  baseURL: '/api',
  timeout: 10000,
  withCredentials: true  // 允许跨域携带cookie
});

// 添加响应拦截器，确保响应格式一致
instance.interceptors.response.use(
  response => {
    // 对于正常的响应，直接返回数据
    console.log('Admin API原始响应:', response);
    
    // axios会自动把响应包装在response.data中
    return response.data;
  },
  error => {
    console.error('Admin API请求错误:', error);
    
    // 对于错误的响应，统一格式
    return {
      code: -1,
      message: error.message || '请求失败',
      data: null
    };
  }
);

export default {
  /**
   * 获取所有系统设置
   * @returns {Promise} 请求Promise
   */
  getAllSettings() {
    return instance.get('/admin/settings');
  },
  
  /**
   * 获取基本设置
   * @returns {Promise} 请求Promise
   */
  getBasicSettings() {
    return instance.get('/admin/settings/basic');
  },
  
  /**
   * 保存基本设置
   * @param {Object} settings 基本设置
   * @returns {Promise} 请求Promise
   */
  saveBasicSettings(settings) {
    return instance.post('/admin/settings/basic', settings);
  },
  
  /**
   * 获取内容设置
   * @returns {Promise} 请求Promise
   */
  getContentSettings() {
    return instance.get('/admin/settings/content');
  },
  
  /**
   * 保存内容设置
   * @param {Object} settings 内容设置
   * @returns {Promise} 请求Promise
   */
  saveContentSettings(settings) {
    return instance.post('/admin/settings/content', settings);
  },
  
  /**
   * 获取邮件设置
   * @returns {Promise} 请求Promise
   */
  getEmailSettings() {
    return instance.get('/admin/settings/email');
  },
  
  /**
   * 保存邮件设置
   * @param {Object} settings 邮件设置
   * @returns {Promise} 请求Promise
   */
  saveEmailSettings(settings) {
    return instance.post('/admin/settings/email', settings);
  },
  
  /**
   * 测试邮件发送
   * @param {String} email 测试邮箱地址
   * @returns {Promise} 请求Promise
   */
  testEmailSending(email) {
    return instance.post('/admin/settings/email/test', { email });
  },
  
  /**
   * 获取第三方集成设置
   * @returns {Promise} 请求Promise
   */
  getIntegrationSettings() {
    return instance.get('/admin/settings/integration');
  },
  
  /**
   * 保存第三方集成设置
   * @param {Object} settings 第三方集成设置
   * @returns {Promise} 请求Promise
   */
  saveIntegrationSettings(settings) {
    return instance.post('/admin/settings/integration', settings);
  },
  
  /**
   * 获取用户列表
   * @param {Object} params 查询参数
   * @returns {Promise} 请求Promise
   */
  getUserList(params) {
    return instance.get('/admin/user/list', { params });
  },
  
  /**
   * 获取所有用户
   * @returns {Promise} 请求Promise
   */
  getAllUsers() {
    return instance.get('/admin/users');
  },

  /**
   * 创建新用户
   * @param {Object} userData 用户数据
   * @returns {Promise} 请求Promise
   */
  createUser(userData) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    
    // 添加必填字段
    params.append('username', userData.username);
    params.append('nickname', userData.nickname);
    params.append('password', userData.password);
    params.append('passwordRepeat', userData.passwordRepeat);
    
    // 添加可选字段
    if (userData.email) {
      params.append('email', userData.email);
    }
    
    // 添加性别字段，默认为2(未知)
    params.append('gender', userData.gender || 2);
    
    if (userData.role) {
      params.append('role', userData.role);
    }
    
    if (userData.status) {
      params.append('status', userData.status);
    }
    
    console.log('创建用户请求数据:', params.toString());
    return instance.post('/admin/user/create', params, { headers });
  },

  /**
   * 更新用户信息
   * @param {Number} userId 用户ID
   * @param {Object} userData 用户数据
   * @returns {Promise} 请求Promise
   */
  updateUserByAdmin(userId, userData) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('id', userId);
    for (const key in userData) {
      if (key !== 'id' && userData[key] !== undefined && userData[key] !== null) {
        params.append(key, userData[key]);
      }
    }
    
    console.log('更新用户请求数据:', params.toString());
    return instance.post('/admin/user/update', params, { headers });
  },

  /**
   * 切换用户状态
   * @param {Number} userId 用户ID
   * @param {String} currentStatus 当前状态
   * @returns {Promise} 请求Promise
   */
  toggleUserStatus(userId, currentStatus) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('userId', userId);
    // 后端接口需要的是数字状态值：0正常，1禁言
    const state = currentStatus === 'ACTIVE' ? 1 : 0;
    params.append('state', state);
    
    console.log('切换用户状态请求数据:', params.toString());
    return instance.post('/admin/user/state', params, { headers });
  },

  /**
   * 删除用户
   * @param {Number} userId 用户ID
   * @returns {Promise} 请求Promise
   */
  deleteUser(userId) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('userId', userId);
    
    console.log('删除用户请求数据:', params.toString());
    return instance.post('/admin/user/delete', params, { headers });
  },

  /**
   * 获取文章列表
   * @param {Object} params 查询参数
   * @returns {Promise} 请求Promise
   */
  getArticleList(params) {
    return instance.get('/admin/article/list', { params });
  },

  /**
   * 删除文章
   * @param {Number} articleId 文章ID
   * @returns {Promise} 请求Promise
   */
  deleteArticle(articleId) {
    // 使用表单格式提交，与后端@RequestParam一致
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('articleId', articleId);
    
    console.log('删除文章请求数据:', params.toString());
    return instance.post('/admin/article/delete', params, { headers });
  },

  /**
   * 更新文章状态
   * @param {Number} articleId 文章ID
   * @param {Number} state 状态
   * @returns {Promise} 请求Promise
   */
  updateArticleStatus(articleId, state) {
    // 使用表单格式提交，与后端@RequestParam一致
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('articleId', articleId);
    params.append('state', state);
    
    console.log('更新文章状态请求数据:', params.toString());
    return instance.post('/admin/article/status', params, { headers });
  },

  /**
   * 文章置顶/取消置顶
   * @param {Number} articleId 文章ID
   * @param {Number} isPinned 是否置顶 (1置顶, 0取消置顶)
   * @returns {Promise} 请求Promise
   */
  togglePinArticle(articleId, isPinned) {
    // 使用表单格式提交，与后端@RequestParam一致
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('articleId', articleId);
    params.append('isPinned', isPinned);
    
    console.log('文章置顶状态请求数据:', params.toString());
    return instance.post('/admin/article/pin', params, { headers });
  },

  /**
   * 获取评论列表
   * @param {Object} params 查询参数
   * @returns {Promise} 请求Promise
   */
  getCommentList(params) {
    return instance.get('/comment/admin/list', { params });
  },

  /**
   * 删除评论
   * @param {Number} commentId 评论ID
   * @returns {Promise} 请求Promise
   */
  deleteComment(commentId) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('id', commentId);
    
    console.log('删除评论请求数据:', params.toString());
    return instance.post('/comment/admin/delete', params, { headers });
  },

  /**
   * 更新评论状态
   * @param {Number} commentId 评论ID
   * @param {Number} status 状态
   * @returns {Promise} 请求Promise
   */
  updateCommentStatus(commentId, status) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('commentId', commentId);
    params.append('status', status);
    
    return instance.post('/comment/admin/status', params, { headers });
  },
  
  /**
   * 获取评论举报列表
   * @param {Number} commentId 评论ID
   * @returns {Promise} 请求Promise
   */
  getCommentReports(commentId) {
    return instance.get('/comment/admin/getReports', { params: { id: commentId } });
  },
  
  /**
   * 忽略评论举报
   * @param {Number} commentId 评论ID
   * @returns {Promise} 请求Promise
   */
  ignoreCommentReports(commentId) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('id', commentId);
    
    console.log('忽略评论举报请求数据:', params.toString());
    return instance.post('/comment/admin/ignoreReports', params, { headers });
  },

  /**
   * 获取板块列表
   * @returns {Promise} 请求Promise
   */
  getBoardList() {
    return instance.get('/admin/board/list');
  },

  /**
   * 添加新板块
   * @param {String} name 板块名称
   * @param {Number} sort 排序值
   * @returns {Promise} 请求Promise
   */
  addBoard(name, sort) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('name', name);
    
    if (sort !== undefined && sort !== null) {
      params.append('sort', sort);
    }
    
    return instance.post('/admin/board/add', params, { headers });
  },

  /**
   * 更新板块信息
   * @param {Number} boardId 板块ID
   * @param {String} name 板块名称
   * @param {Number} sort 排序值
   * @returns {Promise} 请求Promise
   */
  updateBoard(boardId, name, sort) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('boardId', boardId);
    params.append('name', name);
    params.append('sort', sort);
    
    return instance.post('/admin/board/update', params, { headers });
  },

  /**
   * 设置板块状态
   * @param {Number} boardId 板块ID
   * @param {Number} state 状态值（0正常，1禁用）
   * @returns {Promise} 请求Promise
   */
  setBoardState(boardId, state) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('boardId', boardId);
    params.append('state', state);
    
    return instance.post('/admin/board/state', params, { headers });
  },

  /**
   * 删除板块
   * @param {Number} boardId 板块ID
   * @returns {Promise} 请求Promise
   */
  deleteBoard(boardId) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('boardId', boardId);
    
    return instance.post('/admin/board/delete', params, { headers });
  },

  /**
   * 更新板块排序
   * @param {Number} boardId 板块ID
   * @param {Number} sort 排序值
   * @returns {Promise} 请求Promise
   */
  updateBoardSort(boardId, sort) {
    // 使用表单格式提交
    const headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
    };
    
    // 创建URLSearchParams对象来构建表单数据
    const params = new URLSearchParams();
    params.append('boardId', boardId);
    params.append('sort', sort);
    
    return instance.post('/admin/board/sort', params, { headers });
  },

  /**
   * 检查和修复板块文章数
   * @returns {Promise} 请求Promise
   */
  fixBoardArticleCounts() {
    return instance.post('/admin/board/fixArticleCounts');
  }
}; 
